תרגול מספר 9: בנאים, שיטות של אובייקטים והכמסה מבוא למדעי המחשב - סמסטר א' תשע"א,תרגול מס' 9. נושאי התרגול: this

Similar documents
ASP.Net MVC + Entity Framework Code First.

טכנולוגיית WPF מספקת למפתחים מודל תכנות מאוחד לחוויית בניית יישומיי

תצוגת LCD חיבור התצוגה לבקר. (Liquid Crystal Display) המערכת.

מבוא לתכנות ב- JAVA תרגול 7

תרגול 8. Hash Tables

ניפוי שגיאות )Debug( מאת ישראל אברמוביץ

מבוא למחשב בשפת פייתון

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מספר ת"ז: יש לסמן את התשובה הטובה ביותר בתשובון. לא יינתן ניקוד על סימון תשובה בטופס הבחינה או במחברת הבחינה.

A R E Y O U R E A L L Y A W A K E?

Practical Session No. 13 Amortized Analysis, Union/Find

זו מערכת ישרת זוית )קרטזית( אשר בה יש לנו 2 צירים מאונכים זה לזה. באותו מישור ניתן להגדיר נקודה על ידי זוית ורדיוס וקטור

גירסה C++ Tutorial Nir Adar עמוד 1

Hebrew Ulpan HEB Young Judaea Year Course in Israel American Jewish University College Initiative

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

עץ תורשה מוגדר כך:שורש או שורש ושני בנים שכל אחד מהם עץ תורשה,כך שערך השורש גדול או שווה לסכום הנכדים(נכד-הוא רק בן של בן) נתון העץ הבא:

Reflection Session: Sustainability and Me

DNS פרק 4 ג' ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים 1

Advisor Copy. Welcome the NCSYers to your session. Feel free to try a quick icebreaker to learn their names.

מכונת מצבים סופית תרגול מס' 4. Moshe Malka & Ben lee Volk

תרגול 01: ממשקים והורשה

THINKING ABOUT REST THE ORIGIN OF SHABBOS

פולימורפיזם. blog.csit.org.il מדעי המחשב

המבנה הגאומטרי של מידה

2007 Zindell Technologies, Ltd.

Rules Game (through lesson 30) by Nancy Decker Preparation: 1. Each rule board is immediately followed by at least three cards containing examples of

SEEDS OF GREATNESS MINING THROUGH THE STORY OF MOSHE S CHILDHOOD

שאלות חזרה לקראת מבחן מפמ"ר אינטרנט וסייבר

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 134 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 37

A JEW WALKS INTO A BAR: JEWISH IDENTITY IN NOT SUCH JEWISH PLACES

תוכנה 1 בשפת Java שיעור מספר 8: "ירושה נכונה" בית הספר למדעי המחשב אוניברסיטת תל אביב

קשירות.s,t V שני צמתים,G=(V,E) קלט: גרף מכוון מ- s t ל- t ; אחרת.0 אם יש מסלול מכוון פלט: הערה: הגרף נתון בייצוג של רשימות סמיכות.

Expressions (ex 8) Wild World (ex 7) Cars (ex 9)

עבודה מס' 3: תכנות מונחה עצמים ורשימות

מספר השאלון: Thinking Skills נספח: כישורי חשיבה )לפרק ראשון ושני( א נ ג ל י ת (MODULE F) ספרות )מילון הראפס אנגלי-אנגלי-ערבי(

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון.

סמסטר אביב 2015, מועד ב' סמסטר קיץ 2015, מועד א' מתרגלים: אביב - נורית מושקוביץ', הלאל עאסי, אלירן וייס; קיץ מאיה דיאמנט

Theories of Justice

נספח: כישורי חשיבה )לפרק ראשון ושני( אנגלית (MODULE F) ספרות או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי

דיאגרמה לתיאור Classes

Patents Basics. Yehuda Binder. (For copies contact:

תאריך הבחינה: מבוא למדעי המחשב ד "ר פז כרמי פרופ' מייק קודיש ד "ר חן קיסר ד "ר צחי רוזן שם הקורס: מבוא למדעי המחשב מספר הקורס:

זה. Nir Adar

תכנות בטוח חלק ב ' מאת עידו קנר

1 5 5:1 Holy_bible_

תרגול 11 תור עץ חיפוש בינארי

מדריך למשתמש התקנה עצמית

Name Page 1 of 5. דף ז. This week s bechina begins with the fifth wide line at the top of

א נ ג ל י ת בהצלחה! ב. משרד החינוך בגרות לנבחנים אקסטרניים )מילון הראפס אנגלי-אנגלי-ערבי( השימוש במילון אחר טעון אישור הפיקוח על הוראת האנגלית.

FULL ARTICLE ACTIVE DIRECTORY

Name Page 1 of 6. דף ט: This week s bechina starts at the two dots in the middle of

byte code :(compiler) .class מהדר בתהליך עורך, סייר, קומפיילר,,JRE וכו'. למשל: אקליפס. נקודות חשובות: חסכון בהקצאת זיכרון.

NTFS ADS Magic Tricks

מטוסים נופלים, כורים מתפוצצים זיכרון אוטומטי מקטסטרופות לומדים בניינים קורסים,

מבוא למחשב בשפת Matlab

מבוא לאסמבלי מאת אופיר בק חלקים נרחבים ממאמר זה נכתבו בהשראת הספר "ארגון המחשב ושפת סף" אשר נכתב ע"י ברק גונן לתוכנית גבהים של משרד החינוך.

הרצאה מספר 10 נושאים לשיעור זה: סיכום הפקודות עד לשיעור זה *** )S-Q( = מקומות בהם ניתן לשלב תתי שאילתות

ניסוי בפייתון מכון טכנולוגי לישראל הניסוי מתקיים בבניין פישבך, חדר 573 )במסדרון למאייר(. המאחר ביותר מ- 53 דקות לא יורשה לבצע את הניסוי.

ב "ה. ABC s of Judaism. Fundamentals of Jewish Thought and Practice. June 2007 Tammuz 5767 Jewish Educational Institute Chabad Brisbane

פעולות קלט פלט Streams( )I\O

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון.

סוטמה ףא ןוויכ תיתימא ריוא תוריהמ סוטמה ביתנ תיעקרק תוריהמ

October 21, Marheshvan 5778 HIR The Bayit Steven Exler Lessons from Babel: Language, Coexistence, and Speaking Hebrew

ANNEXURE "E1-1" FORM OF IRREVOCABLE STANDBY LETTER OF CREDIT PERFORMANCE OF CONTRACT (WHERE PRICES ARE NOT LINKED TO AN ESCALATION FORMULA)

Parashat Balak. Sharon Rimon

הבינגמה הדובע תביבסב תונכתל ריהמ ךירדמ

בהצלחה! (MODULE C) Hoffman, Y. (2014). The Universal English-Hebrew, Hebrew-English Dictionary

State Pattern מימוש מכונת מצבים (FSM) מבוא בעיה תמיכה ועדכונים עדכון מס' 48 מאי 2002

אנגלית ספרות בהצלחה! /המשך מעבר לדף/ נספח: כישורי חשיבה )לפרק ראשון ושני( או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי

מבוא לרשתות - תרגול מס' 11 Transparent Bridges

Structural Vs. Nominal Typing

NATIONAL COUNCIL OF YOUNG ISRAEL. Shavuot Nation JEWISH EDITION. Compiled by Gabi Weinberg Teen Program Director

Bereshit / Exodus 18:1-20:23, Isaiah 6:1-7:6, 9:5-6, Matthew 6:1-8:1. Parashat Yitro

הכלה המשך בדף עבודה הקודם, הדגשנו את ההכלה של אובייקט אחד מוכל בתוך אובייקט אחר.

המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית

A lot of the time when people think about Shabbat they focus very heavily on the things they CAN T do.

נספח: כישורי חשיבה )לפרק ראשון ושני( אנגלית (MODULE D) ספרות או מילון אנגלי-עברי-עברי-אנגלי

Interrogatives. Interrogative pronouns and adverbs are words that are used to introduce questions. They are not inflected for gender or number.

JUDAISM AND INDIVIDUALITY

Computer Structure. Exercise #1 יש להגיש את התשובות הסופיות על גבי טופס זה.

פרק היררכי

In the previous two classes, we discovered the spiritual dimension of our Self, the soul that

HEBREW THROUGH MOVEMENT

ALEPH-TAU Hebrew School Lesson 204 (Nouns & Verbs-Masculine)

הבסיס כתיבת התכנית הראשונה שימוש במשתנים. הטיפוס הבסיסי object. הטיפוס הבסיסי string משפטי בקרה. שימוש ב- Enumerations. שימוש ב- Namespaces

שאלון ו' הוראות לנבחן

מבחן מועד ב' אנא קיראו היטב את ההראות שלהלן:

SHABBOS, 10 TAMMUZ, 5778

Relationships: Everything Else is Commentary

הקדמה פרופ' מוטי בן-ארי המחלקה להוראת המדעים מכון ויצמן למדע

אנגלית שאלון ז' ג רסה א' הוראות לנבחן בהצלחה! )4( ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנות ולנבחנים כאחד. (MODULE G)

THEORIES OF FAMILY INTERVENTION

is the Image of Elohim (and not-adam is the Image of elohim acherim) The Zohar on Anger and the Image of God

WISDOM FROM ALL MY TEACHERS: CHALLENGES AND INITIATIVES IN CONTEMPORARY TORAH EDUCATION URIM Publications, 2003 Copyright ATID.

מבוא למדעי המחשב תרגיל מספר 4

אנגלית (MODULE E) בהצלחה!

שאלון ד' הוראות לנבחן

מבוא לתרבות סייבר שיעור מס

Transcription:

תרגול מספר 9: בנאים, שיטות של אובייקטים והכמסה נושאי התרגול: this Shallow Copy, Deep Copy )Encapsulation( הכמסה )visibility modifiers( הגבלת גישה Setters ו- Getters )Exceptions( חריגות בתרגול הקודם הכרנו את יסודות התכנות המונחה עצמים. המחלקה הינה תבנית ממנה ניתן לייצר אובייקטים. לכל אובייקט ישנו מצב )state( וישנה התנהגות.)behavior( המצב מתואר בעזרת שדות.)methods( וההתנהגות מתוארת בעזרת שיטות,)fields, data members( public class MyString { //class fields public char[] elements; public int length; לדוגמה, המחלקה MyString המייצגת רצף של תווים )מחרוזת( ומוגדרת כך: //empty constructor public MyString(){ elements = new char[0]; length = 0; //constructor with a parameter public MyString(String s){ length = s.length(); elements = new char[length]; for (int i = 0; i < s.length(); i++) { elements[i] = s.charat(i); //constructor with a parameter public MyString(char[] otherelements){ length = otherelements.length; elements = new char[length]; for (int i = 0; i < otherelements.length; i++) { elements[i] = otherelements[i]; //copy constructor public MyString(MyString other){ length = other.length; elements = new char[length]; for (int i = 0; i < other.length; i++) { elements[i] = other.elements[i]; 1

//class method public int length(){ return length; שימו לב: כאשר משתמשים בבנאי העתקה יש לשים לב שיתכן שהערך המועבר יהיה.null לדוגמה, אם נבצע את הקריאות הבאות: במקרה זה הערך המועבר לבנאי העתקה יהיה null וכשננסה לבצע את השורה )בבנאי ההעתקה(: שגיאת זמן ריצה מסוג.NullPointerException נקבל public class Point { public double x; public double y; public Point() { x = 0; y = 0; :Deep Copy ו- Shallow Copy בהרצאה ראינו את המחלקות Point ו-,Circle כאשר המחלקה Point הוגדרה כך: public Point(Point p) { x = p.x; y = p.y; public class Circle{ public Point center; public double radius; והמחלקה Circle הוגדרה כך: //constructors public Circle() { center = new Point(); radius = 0; public Circle(Point cen, double rad) { center = new Point(cen); if (rad >= 0) radius = rad; else raduis = 0; //Circle 2

ניתן להוסיף למחלקה Circle את ה- copy constructor הבא: ואז כאשר נבצע את הפעולות הבאות: אז גם ה- center של circ1 ישתנה. public Circle(Circle other) { center = other.center; radius = other.radius; Circle circ1 = new Circle(); Circle circ2 = new Circle(circ1); circ2.center.x = 4; גישה זו ידועה בשם Shallow Copy )העתקה שטחית( כיוון שאנו מעתיקים את הכתובת של ה- Circle המתקבל בפרמטר.other ניתן היה להשתמש בגישה של Deep Copy )העתקה עמוקה(, ולהעתיק רק את הערכים הפרימיטיביים הפנימיים. לדוגמה: public Circle(Circle other) { center = new Point(other.center); radius = other.radius; שימו לב שפה השתמשנו ב- copy constructor של Point על מנת להעתיק את.center לעיתים נרצה להשתמש בשיטת ה- Deep Copy ולעיתים בשיטת ה-,Shallow Copy תלוי בדרישות. :this ראינו כי ניתן להגדיר מספר בנאים למחלקה בעזרת.Overloading בהגדרת הבנאי, ניתן לבצע קריאה לבנאי אחר, בתנאי שזו השורה הראשונה בקוד. הדבר נעשה בעזרת המילה השמורה.this נוכל לשכתב את הבנאי המעתיק באופן הבא: //copy constructor public MyString(MyString other){ this(other.elements); 3

public MyString(){ this(""); ניתן גם לשנות את הבנאי הריק: ניתן להשתמש באופרטור this גם על מנת להבדיל בין פרמטרים אשר מועברים לשיטה לבין השדות של האובייקט. לדוגמה: public class MyString{ public char[] elements; public int length; public MyString(char[] elements, int length) { this.length = length; this.elements = new char[this.length]; for (int i = 0; i < this.length; i=i+1) this.elements[i] = elements[i]; הכמסה )encapsulation( והגבלת גישות modifiers( :)visibility עקרון ההכמסה מאפשר לאובייקט להכיל את המצב שלו ואת השיטות הקשורות לאובייקט. הרעיון מאחורי הכמסה הוא שכך אנו בעצם מייצגים מהן היכולות של האובייקט )ע"פ השיטות שהן )public ולא כיצד האובייקט עובד מבפנים. בדרך זו אנו בעצם מפשטים את האובייקט למשתמש )המשתמש לא צריך לדעת כיצד האובייקט עובד, אלא רק מה הוא עושה(. בעזרת עיקרון זה אנו משיגים: שמירה על חוקיות המצב של האובייקט מי שכותב את המחלקה יודע אילו ערכים חוקיים ואילו ערכים אינם חוקיים, ויכול להכריח אותם פשטות מי שכותב את המחלקה קובע מה המשתמש צריך לדעת על האובייקט )מבלי לתת את הפרטים הפנימיים של מימוש המחלקה( הגנה על המידע הפנימי באובייקט כך נוכל להבטיח שאף אחד לא יוכל לקרוא את הערכים הפנימיים של האובייקט :getters & setters 4

ע) מבוא למדעי המחשב - סמסטר א' תשע"א,תרגול מס' 9 על מנת להבטיח את עקרון ההכמסה, ניתן להגדיר שיטות אשר מאפשרות לנו להחזיר או לשנות את השדות של האובייקט. שיטות אלו נקראות getters ו-.setters שיטה שהיא getter היא שיטה אשר מחזירה ערך של שדה מסוים, ואילו שיטה שהיא setter היא שיטה אשר קובעת ערך של שדה מסוים. אם נקח לדוגמה את המחלקה Car המייצגת מכונית: public final int MAX_SPEED = 210; public final int MIN_SPEED = -20; public int speed; public int getspeed() { return speed; public void setspeed(int speed) { if ((speed >= MIN_SPEED) && (speed <= MAX_SPEED)){ this.speed = speed; ניתן לראות כי יש במחלקה getter בשם getspeed() המחזיר את מהירות המכונית, ו- setter בשם speed) setspeed(int המקבל מהירות חדשה, בודק האם המהירות חוקית )האם היא בטווח(, ואם כן קובע אותה כמהירות החדשה של המכונית. נשים לב שכיוון שהשדה speed מוגדר כ-,public עדיין ניתן לשנות את ערכו מחוץ לאובייקט, ולכן עקרון ההכמסה לא בא לידי ביטוי בדוגמה הזו. ב- Java ניתן להגביל גישה לשדה או לשיטה בעזרת שינוי ה- visibility modifier שלהן. לכן, על מנת לממש את עקרון ההכמסה נשתמש בשיטת הסתרת המידע hiding(,)data כלומר נסתיר שדות ושיטות פנימיות של אובייקט מפני גישה חיצונית )הקומפיילר יבטיח לנו שאף אחד לא יגש אליהם(. עד היום ראינו את ה- visibility modifier הפומבי:.public כאשר הצהרנו על משהו שהוא,public בעצם אפשרנו גישה לכולם )גם מחוץ לאובייקט ניתן היה לגשת לשדה או לשיטה(. נוכל להגביל את הגישה בעזרת המילה השמורה private "י החלפת המקומות בהם הגדרנו שדה או שיטה ב- public ל-.)private כל שדה או שיטה המוגדרים כ- private, אינם נגישים מחוץ לתחום הגדרת המחלקה. נוכל להגדיר את השדה speed בדוגמה הקודמת כ-,private וכך נבטיח שמחוץ למחלקה לא יוכלו לשנות אותו: private final int MAX_SPEED = 210; private final int MIN_SPEED = -20; private int speed; 5

Car car1 = new Car(); car1.speed = 20; // will not compile ואז כאשר היינו מנסים לקמפל את השורות הבאות: הייתה מתקבלת שגיאת קומפילציה, כיוון שהשדה מוגדר כ-.private לא בכל המקרים נרצה להוסיף לכל שדה getter ו setter אוטומטית. אם נגדיר שלכל אובייקט Car יקבע צבעו בעת היצירה ולא יהיה ניתן לשנות זאת עוד אך נוכל להחזירו, private String color; public Car(String color) { this.color = color; נוכל לבצע זאת באופן הבא: public String getcolor() { return color; אם למכונית ישנו קוד הפעלה, ולא נרצה שכל אובייקט יוכל לקרוא את ערך קוד ההפעלה, אז לא נגדיר private String code; public Car(String initialcode) { code = initialcode; public void startcar(string code) { if (!code.equals(this.code)) System.out.println("Wrong code"); else{ //start the car getter לשדה זה. לדוגמה: public void setnewcode(string oldcode, String newcode) { if (!oldcode.equals(code)) System.out.println("Wrong code"); else code = newcode; Exceptions חריגה היא אירוע המתרחש במהלך תוכנית המפר את תהליך הריצה הנורמאלי של פקודות התוכנית. 6

לעיתים חריגות מתרחשות בגלל תקלות בלתי צפויות, כגון בעיה בקובץ אליו כותבים )למשל אין הרשאות כתיבה(, ולעיתים בגלל תקלות תוכנה, כגון שליחת פרמטר לא מתאים לפונקציה. בעצם כבר נתקלנו בחריגות: :ArithmeticException ניסיון חלוקה באפס :IndexOutOfBoundsException חריגה ממערך :NullPointerException ניסיון לפעול על מערך בעל ערך null איך מתייחסים לחריגה: ישנן שלוש דרכים לעשות זאת: להתעלם אפשרי רק עבור RuntimeException לתפוס את ה- Exception על ידי שימוש במילים השמורות try ו- catch להעביר את ה- Exception הלאה על ידי שימוש במילה השמורה throws הפונקציה שאנו כותבים בכותרת דוגמא :1 RuntimeException public final int MAX_SPEED = 210; public final int MIN_SPEED = -20; private int speed; public void setspeed(int speed) throws RuntimeException { if ((speed >= MIN_SPEED) & (speed <= MAX_SPEED)) this.speed = speed; else throw new RuntimeException("illegel speed"); public static void main(string[] args) { Car car = new Car(); car.setspeed(100); public final int MAX_SPEED = 210; public final int MIN_SPEED = -20; private int speed; דוגמא :2 Exception 7

public void setspeed(int speed) throws Exception { if ((speed >= MIN_SPEED) & (speed <= MAX_SPEED)) this.speed = speed; else throw new Exception("illegel speed"); public static void main(string[] args) { Car car = new Car(); try{ car.setspeed(100); catch(exception e){ System.err.println("Caught Exception: " + e.getmessage()); 8